#include <core/init.h>
#include <core/irq.h>
#include <core/io.h>
#include <arch/arm.h>
#include <autoconf.h>
//#include <arch/at91sam926x.h>

// fixme
#define CONF_AT91_KEY_PIO_IDX  PIOA
#define CONF_AT91_KEY_PIN_MASK (0xf << 24)


static int At91KeyIsr(void *pDev)
{
	printf("%s()\n", __FUNCTION__);

	return 0;
}


static __INIT__ int At91KeyInit(void)
{
	UINT32 nPin, nIrq;


	DRIVER_INFO("%s().\n", __FUNCTION__);

	WriteLong(1 << 2, AT91SAM926X_PA_PMC + PMC_PCER);

	At91PioConfInput(CONF_AT91_KEY_PIO_IDX, CONF_AT91_KEY_PIN_MASK, 1);
	ReadLong(PIO_BASE(CONF_AT91_KEY_PIO_IDX) + PIO_ISR);

	At91AicWrite(AIC_SMR(2), 1 << 5);

	for (nPin = 0; nPin < 32; nPin++)
	{
		if ((1 << nPin) & CONF_AT91_KEY_PIN_MASK)
		{
			nIrq = 32 + (CONF_AT91_KEY_PIO_IDX << 5) + nPin;
			RegisterIsr(nIrq, At91KeyIsr, NULL);
		}
	}

	return 0;
}


DRIVER_INIT(At91KeyInit);

